/*
 * Servlet que faz o papel de Controller no MVC,
 * apenas REPASSA as chamadas para o Model (GeradorModel)
 */
package br.uri.com.tap.controller;

import br.uri.com.tap.model.GeradorModel;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author rodrigo
 */
public class controllerServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // Busca o parametro 'nrAlunos'passado pelo JSP (sempre chega como String)
        String param = request.getParameter("nrAlunos");

        // Converte o param de String para int
        int numAlunos = 0;
        if (param != null) {
            numAlunos = Integer.parseInt(param);
        }

        /*Precisamos de um Model que dure mais tempo que um request, afinal o servlet 'morre'
         * a cada chamada. Então vamos 'guardar' o model na Session.
         */

        // Criamos uma referência para um model
        GeradorModel gerador = null;

        // Agora vamos ver se ja existe um model na Session, lembrem que o servlet nah sabe
        // se esta sendo chamado pela primeira vez ou esta no meio de um jogo!
        gerador = (GeradorModel) request.getSession().getAttribute("geradorModel");

        // Testamos se encontrou alguma coisa na Session, na primeira vez estará vazio
        // entao criamos o model e o guardamos na Session! Isso só acontece a primeira vez!
        if(gerador == null){
            gerador = new GeradorModel(numAlunos); // criamos o modelo passando o nr de alunos
            request.getSession().setAttribute("geradorModel", gerador); // guardamos na Session, agora sim, nah morre mais! =)
        }

        // Agora já temos um model criado, morando na Session, entao finalmente,
        // fazemos uso dele!
        // O CONTROLLER SIMPLESMENTE REPASSA AS CHAMADAS PARA O MODEL, ELE NAH FAZ NADA!
        gerador.gerarNum();

        // tendo terminado sua tarefa de repassar o trabalho, o controller encaminha o request para saida
        RequestDispatcher rd = getServletContext().getRequestDispatcher("/saida.jsp");
        if (rd != null) {
            rd.forward(request, response);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
